// state 存储数据
const state = {
  token: null,
  userInfo:{
    userId: '',
    userName: ''
  },
  roles: []
}

// getters 对state数据进行加工
const getters ={
  token: state => state.token,
  userInfo: state => state.userInfo,
  roles: state => state.roles,
}

// mutations 操作数据
const mutations = {
  SET_TOKEN: (state, token) => {
    state.token = token
  },
  SET_USERINFO: (state, userInfo) => {
    state.userInfo = userInfo
    sessionStorage.setItem('userInfo', JSON.stringify(userInfo))
  },
  SET_ROLES: (state, roles) => {
    const parmas = []
    if(!!roles){
      parmas.push(roles)
    }
    state.roles = parmas
    sessionStorage.setItem('roles', JSON.stringify(parmas))
  },
}

// actions 响应组件中的事件
const actions = {
  // 用户登录
  login({ commit }, data) {
    const {userId, password} = data
    return new Promise(async (resolve, reject) => {
      const userInfo = {
        userId: userId,
        userName: 'userName'+userId
      }
      commit("SET_USERINFO", userInfo);
      commit("SET_TOKEN", userId);
      resolve(userInfo)
    })
  },

  // 获取用户授权角色信息，实际应用中 可以通过token通过请求接口在这里获取用户信息
  getRoles({ commit }, userId){
    return new Promise((resolve, reject) =>{
      // 获取权限列表 默认就是超级管理员，因为没有进行接口请求 写死
      const roles = 'admin'
      commit("SET_ROLES", roles);
      resolve(roles)
    } )
  },

  // 获取用户信息 ，如实际应用中 可以通过token通过请求接口在这里获取用户信息
  getInfo({ commit }, data) {
    const {userId} = data
    return new Promise((resolve, reject) =>{
      const userInfo = userId
      commit("SET_USERINFO", userInfo);
      resolve(userInfo)
    } )
  },
  // 退出
  logout({commit}) {
    return new Promise((resolve, reject) => {
      commit("SET_USERINFO", {});
      commit("SET_TOKEN", null);
      commit("SET_ROLES", '');
      resolve(null)
    })
  },

}


// 暴露配置项在 index.js 自动生成对应的store
export default {
  namespaced: true,
  state,
  actions,
  mutations,
  getters
}
